//
//  RootViewController.m
//  Palabris
//
//  Created by 822588 on 28.11.12.
//  Copyright 2012 __MyCompanyName__. All rights reserved.
//

#import "RootViewController.h"


@implementation RootViewController


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    self.title = @"Palabris";
    [super viewDidLoad];

    // Hier ist eine Singleton Objekt, die nur einmal existiert und jede View drauf Zugriff hat
    sharedSingleton = [SingletonClass sharedInstance];
}



- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    
    // Relinquish ownership any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload
{
    [super viewDidUnload];

    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
    // For example: self.myOutlet = nil;
}

- (void)dealloc
{
    [mTextFieldUsername release];
    [mActivityIndicatorView release];
    [mRequest release];
    [super dealloc];
}


/* Keyboard no more cover the Textfield
 */
-(IBAction)textFieldDidBeginEditing:(UITextField *)textField
{
    [sharedSingleton slideFrame:YES :self.view :50];
}

-(IBAction)textFieldDidEndEditing:(UITextField *)textField
{
    [sharedSingleton slideFrame:NO :self.view :50];
}


/*  Hide Keyboard
 * 
 *  Lässt den Keyboard verschwinden, wenn der Hintergrund der View angeklickt wird
 */
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    if(touch.phase == UITouchPhaseBegan) {
        [mTextFieldUsername resignFirstResponder];
    }
}




////////////////////////////////////
//  Event-Buttons                 //
////////////////////////////////////

/*  Push to RegisterViewController
 */
-(IBAction)goRegister:(id)sender{
    
    // Als erstes erstellt man ein Object vom ViewController (Page) zu der man hin will
    RegisterViewController *view = [[RegisterViewController alloc] initWithNibName:@"RegisterViewController" bundle:nil];
    
    // Hier bestimmt ich welche Animation der Übergang bekommt
    view.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    
    // Hier ruft man von der NavigationController (der oberste Vater-Controller) die Push Methode, die dich zu anderen View bringt.
    [self.navigationController pushViewController:view animated:YES];
    

    [view release];

}


/*  Push to MainscreenViewController
 *
 *  !! Login Button !!
 */
-(IBAction)goMainscreen:(id)sender{
    
    // Pruefen ob der Login Name exstiert
    
    // Hier sagen wir, dass der User damit fertig ist etwas einzugeben. Damit das System auch den Keyboard weg macht !
    [mTextFieldUsername resignFirstResponder];
    
    if([mTextFieldUsername text] != nil && 
       [mTextFieldUsername text] != NULL && 
       [[mTextFieldUsername text] length] != 0){

        // Der ActivityIndicatorView (Loader), wird hier gestartet und beim Fin
        [mActivityIndicatorView startAnimating];
        
        
        // Hier wird die Request erstellt
        mRequest = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:URL_SERVICE]];
        mRequest.delegate = self;
        [mRequest addPostValue:@"hiscore" forKey:@"action"];
        
        // Tage 0 für die Request mit der User überprüfung !!
        mRequest.tag = 0;
        
        // Hier wird die Request gestartet
        // Asynchron, da wir den User waerend dessen eine Loading-Meldung geben wollen (Ladebalken oder Ladekreis)
        [mRequest startAsynchronous];
        
    }else{
        // popup
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Input!" 
                                                        message:@"Please enter your Username." 
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];        
    }
}



////////////////////////////////////
//  ASIHTTPRequest Functions      //
////////////////////////////////////


- (void) requestFailed:(ASIHTTPRequest *)request {
    
    [mActivityIndicatorView stopAnimating];
    
    // Tag 0 für die Request mit den User überprüfung
    // Tag 1 für die Request mit den Userbild
    if(request.tag == 0){
        
        // popup
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Request failed" 
                                                        message:@"The User Indication Request is failed" 
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];   
        
    }else{
        
        // popup
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Request failed" 
                                                        message:@"The Request to load the image is failed" 
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];         
    }

    mRequest = nil;
}

- (void) requestFinished:(ASIHTTPRequest *)request {
    
    
    
    // Tag 0 für die Request mit den User überprüfung
    // Tag 1 für die Request mit den Userbild
    if(request.tag == 0){
        

        
        // Dann erstellen wir ein Dokument indem die Element vom XMLFile rein kommen.
        mXMLDocOfEntitys = [[CXMLDocument alloc] initWithXMLString:[mRequest responseString] options:0 error:nil];
        // Hier sagen wir, welches Element wir wollen
        // Explizit hier, fragen wir nach allen "entry"-Elementen
        NSArray *nodes = [mXMLDocOfEntitys nodesForXPath:@"//entry" error:nil];
        
        Boolean isUsernameRegistered = false;
        CXMLElement *resultElement;
        
        // Ueberpruefen ob das Account registriert ist
        // Suchen wir mal alles durch
        for (int i = 0; i < [nodes count]; i++) {
            
            
            // Das Element in einen CXMLElement Objekt ueberfuehren
            resultElement = [nodes objectAtIndex:i];
            
            // Vergleichen wir die Werte
            if( [[mTextFieldUsername text] isEqualToString:[resultElement stringValue]]){
                
                isUsernameRegistered = true;
                
                // Nun ist der Usernamen und User-Hishscore auch für andere VC erreichbar
                sharedSingleton.mUsername = [resultElement stringValue];
                sharedSingleton.mUserHighscore = (NSInteger*)[[[resultElement attributeForName:@"score"] stringValue] integerValue];

            }
        }
        
        if(isUsernameRegistered){
            

            //
            // Nun machen wir eine zweite Request, um auch das Bild des Users zu bekommen
            //
            
            // Hier wird die Request erstellt
            mRequest = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:
                                                           [NSString stringWithFormat:URL_IMAGE_SERVICE, sharedSingleton.mUsername]]];
            mRequest.delegate = self;
            
            // Tage 1 für die UserImage Request !!
            mRequest.tag = 1;
            
            // Hier wird die Request gestartet
            // Asynchron, da wir den User waerend dessen eine Loading-Meldung geben wollen (Ladebalken oder Ladekreis)
            [mRequest startAsynchronous];
            
        }else{
            
            [mActivityIndicatorView stopAnimating];
            
            
            // popup
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login failed" 
                                                        message:@"Your Username is incorrect." 
                                                        delegate:nil 
                                                        cancelButtonTitle:@"OK"
                                                        otherButtonTitles:nil];
            [alert show];
            [alert release];        
        }
        
    }else{
        
        [mActivityIndicatorView stopAnimating];
        
        sharedSingleton.mUserImage = [UIImage imageWithData:[request responseData]];
        mRequest = nil;
        
        
        //
        // Wenn alle notwendigen Requests erfolgreich waren, dann darf der User ins Mainscreen rein
        //
        
        // Als erstes erstellt man ein Object vom ViewController (Page) zu der man hin will
        MainscreenViewController *view = [[MainscreenViewController alloc] initWithNibName:@"MainscreenViewController" bundle:nil];
        
        // Hier bestimmt ich welche Animation der Übergang bekommt
        view.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        
        
        // Hier ruft man von der NavigationController (der oberste Vater-Controller) die Push Methode, die dich zu anderen View bringt.
        [self.navigationController pushViewController:view animated:YES];
        
        
        [view release];
    }
    
    
    
    
}

@end
